iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

static靜態

1. 類別屬性

修飾語,可與其他修飾語合用,可用在 class 的內部類、屬性、方法中,不需建立物件就可以直接存取,其記憶體位置是在global區。

靜態的意思是JVM載入程式後,跟著程式一起在記憶體中佔有空間,而不是主程式開始執行後才跟記憶體要空間。

2. 宣告static成員

[存取權限] static 資料類型 變數名稱(=初始化);

[存取權限] static 返回類型 方法名稱([參數列]){
		程式區塊;
}

3. 取用static成員

  1. 類別名稱.類別變數;
  2. 物件變數.類別變數;
public class StaticDemo {

	public static String name = "小明";
	String enName = "Jack";
	public static void main(String[] args) {
		
		StaticDemo s1 = new StaticDemo();
		StaticDemo s2 = new StaticDemo();
		
		System.out.println("1:" + s1.name);
		System.out.println("2:" + StaticDemo.name);
		
		s1.name = "阿傑";
		System.out.println("3:" + s2.name);
		System.out.println("4:" + StaticDemo.name);
		

	}

}
/*
結果:
1:小明
2:小明
3:阿傑
4:阿傑
*/

4. static成員的特性

上面那段程式碼明顯的透露出:

值只會在記憶體中保存一份,因此只要有修改,不管使用哪一種語法讀取值都會相同。

記憶體配置:

https://ithelp.ithome.com.tw/upload/images/20231002/20163139clLFdXwLrE.png

public class StaticDemo {

	public static String name = "小明";
	String enName = "Jack";
	public static void show() { 
		System.out.println(name);
		System.out.println(enName);//會報錯,
	}
	public void show2() { 
		System.out.println(name);
		System.out.println(enName);
	}
	public static void main(String[] args) {
		
		StaticDemo s1 = new StaticDemo();
		StaticDemo s2 = new StaticDemo();
		
		System.out.println("1:" + s1.name);
		System.out.println("2:" + StaticDemo.name);
		
		s1.name = "阿傑";
		System.out.println("3:" + s2.name);
		System.out.println("4:" + StaticDemo.name);
		

	}

}

static成員只允許存取 static成員。

public static void show() { 
    System.out.println(name);
    System.out.println(enName);//會報錯,
}

非static成員 可直接存取static成員與非static成員。

public void show2() { 
    System.out.println(name);
    System.out.println(enName);
}

5.static 類別屬性的初始化

static 類別屬性的初始化有二種:

  1. 宣告時就指定初始值。
  2. 透過static區塊來初始化。

注意:必須放在類別內, 不屬於任何方法, 會在類別變數配置後自動開始執行。

static {
	程式區塊; 
}

小結:比較有static跟沒有static的差異,一個決定性的不同是載入記憶體的時機。

因為一開始就存在於記憶體之中,所以稱為靜態(static)。

今天就介紹了static 明天就會是封裝的最後一篇囉~


上一篇
Day 17 封裝(Encapsulation)II
下一篇
Day 19 封裝(Encapsulation)IV
系列文
玩轉Java:從基礎打造你的程式超能力30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言